package Array;

import java.util.HashMap;

/**
 * 使用HashMap存储，键为果子类型，值为果子数量
 *  遍历数组，向map中按照类型添加果子数量
 *  如果果子种类大于2，则移动慢指针【扔掉先放入的水果】，等到果子种类等于2后，统计果篮中果子数量，较大值更新
 */
public class p904 {
    class Solution {
        public int totalFruit(int[] fruits) {
            int slowIndex = 0;
            int fastIndex;
            int res = 0;
            // 键为果子类型，值为果子数量
            HashMap<Integer, Integer> map = new HashMap<>();
            for(fastIndex = 0; fastIndex < fruits.length; fastIndex++){
                map.put(fruits[fastIndex], map.getOrDefault(fruits[fastIndex], 0) + 1);
                while (map.size() > 2){ // 如果窗口中水果种类大于2，扔掉前面加入的水果
                    map.put(fruits[slowIndex], map.get(fruits[slowIndex]) - 1);
                    if (map.get(fruits[slowIndex]) == 0){
                        map.remove(fruits[slowIndex]);
                    }
                    slowIndex++;
                }
                res = Math.max(res, fastIndex - slowIndex + 1);
            }

            return res;
        }
    }
}
